﻿<?php
/**
 * Fonctions pour l'application GSB

 * @package default
 * @author Cheri Bibi
 * @version    1.0
 */

/**
 * Teste si un quelconque utilisateur est connecté
 * @return vrai ou faux 
 */
function estConnecte() {
    return isset($_SESSION['idUtilisateur']);
}

/**
 * Enregistre dans une variable session les infos d'un utilisateur

 * @param $id 
 * @param $nom
 * @param $prenom
 */
function connecter($id, $nom, $prenom, $metier) {
    $_SESSION['idUtilisateur'] = $id;
    $_SESSION['nom'] = $nom;
    $_SESSION['prenom'] = $prenom;
    $_SESSION['metier'] = $metier;
}

/**
 * Détruit la session active
 */
function deconnecter() {
    session_destroy();
}

/**
 * Transforme une date au format français jj/mm/aaaa vers le format anglais aaaa-mm-jj

 * @param $madate au format  jj/mm/aaaa
 * @return la date au format anglais aaaa-mm-jj
 */
function dateFrancaisVersAnglais($maDate) {
    @list($jour, $mois, $annee) = explode('/', $maDate);
    return date('Y-m-d', mktime(0, 0, 0, $mois, $jour, $annee));
}

/**
 * Transforme une date au format format anglais aaaa-mm-jj vers le format français jj/mm/aaaa 

 * @param $madate au format  aaaa-mm-jj
 * @return la date au format format français jj/mm/aaaa
 */
function dateAnglaisVersFrancais($maDate) {
    @list($annee, $mois, $jour) = explode('-', $maDate);
    $date = "$jour" . "/" . $mois . "/" . $annee;
    return $date;
}

/**
 * retourne le mois au format aaaamm selon le jour dans le mois

 * @param $date au format  jj/mm/aaaa
 * @return le mois au format aaaamm
 */
function getMois($date) {
    @list($jour, $mois, $annee) = explode('/', $date);
    if (strlen($mois) == 1) {
        $mois = "0" . $mois;
    }
    return $annee . $mois;
}

/* gestion des erreurs */

/**
 * Indique si une valeur est un entier positif ou nul

 * @param $valeur
 * @return vrai ou faux
 */
function estEntierPositif($valeur) {
    return preg_match("/[^0-9]/", $valeur) == 0;
}

/**
 * Indique si un tableau de valeurs est constitué d'entiers positifs ou nuls

 * @param $tabEntiers : le tableau
 * @return vrai ou faux
 */
function estTableauEntiers($tabEntiers) {
    $ok = true;
    foreach ($tabEntiers as $unEntier) {
        if (!estEntierPositif($unEntier)) {
            $ok = false;
        }
    }
    return $ok;
}

/**
 * Vérifie si une date est inférieure d'un an à la date actuelle

 * @param $dateTestee 
 * @return vrai ou faux
 */
function estDateDepassee($dateTestee) {
    $dateActuelle = date("d/m/Y");
    @list($jour, $mois, $annee) = explode('/', $dateActuelle);
    $annee--;
    $AnPasse = $annee . $mois . $jour;
    @list($jourTeste, $moisTeste, $anneeTeste) = explode('/', $dateTestee);
    return ($anneeTeste . $moisTeste . $jourTeste < $AnPasse);
}

/**
 * Vérifie la validité du format d'une date française jj/mm/aaaa 

 * @param $date 
 * @return vrai ou faux
 */
function estDateValide($date) {
    $tabDate = explode('/', $date);
    $dateOK = true;
    if (count($tabDate) != 3) {
        $dateOK = false;
    } else {
        if (!estTableauEntiers($tabDate)) {
            $dateOK = false;
        } else {
            if (!checkdate($tabDate[1], $tabDate[0], $tabDate[2])) {
                $dateOK = false;
            }
        }
    }
    return $dateOK;
}

/**
 * Vérifie que le tableau de frais ne contient que des valeurs numériques 

 * @param $lesFrais 
 * @return vrai ou faux
 */
function lesQteFraisValides($lesFrais) {
    return estTableauEntiers($lesFrais);
}

/**
 * Vérifie la validité des trois arguments : la date, le libellé du frais et le montant 

 * des message d'erreurs sont ajoutés au tableau des erreurs

 * @param $dateFrais 
 * @param $libelle 
 * @param $montant
 */
function valideInfosFrais($dateFrais, $libelle, $montant) {
    if ($dateFrais == "") {
        ajouterErreur("Le champ date ne doit pas être vide");
    } else {
        if (!estDatevalide($dateFrais)) {
            ajouterErreur("Date invalide");
        } else {
            if (estDateDepassee($dateFrais)) {
                ajouterErreur("date d'enregistrement du frais dépassé, plus de 1 an");
            }
        }
    }
    if ($libelle == "") {
        ajouterErreur("Le champ description ne peut pas être vide");
    }
    if ($montant == "") {
        ajouterErreur("Le champ montant ne peut pas être vide");
    } else
    if (!is_numeric($montant)) {
        ajouterErreur("Le champ montant doit être numérique");
    }
}

/**
 * Ajoute le libellé d'une erreur au tableau des erreurs 

 * @param $msg : le libellé de l'erreur 
 */
function ajouterErreur($msg) {
    if (!isset($_REQUEST['erreurs'])) {
        $_REQUEST['erreurs'] = array();
    }
    $_REQUEST['erreurs'][] = $msg;
}

/**
 * Retoune le nombre de lignes du tableau des erreurs 

 * @return le nombre d'erreurs
 */
function nbErreurs() {
    if (!isset($_REQUEST['erreurs'])) {
        return 0;
    } else {
        return count($_REQUEST['erreurs']);
    }
}

/**
 * ecrit si l'utilisateur connecté est un comptable ou un medecin
 */
function getTypeMetier() {
    if ($_SESSION['metier'] == 1) {
        echo "Comptable";
    } else {
        echo "Visiteur";
    }
}

/**
 * 
 * @return un tableau avec les 6 derniers mois
 */
function getLesSixDerniersMois() {
    $lesMois = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
    $mois = array();
    $annee = date('Y');
    for ($i = 0; $i < 6; $i++) {
        if ($i >= 1 && date('n', strtotime("-$i month")) == 12) {
            $annee = date('Y', strtotime("-1 year"));
        }
        $mois[$i]['mois'] = $annee.date('m', strtotime("-$i month"));
        $mois[$i]['libelle'] = $lesMois[date('n', strtotime("-$i month"))] . " " . $annee;
    }
    return $mois;
}
/**
 * 
 * @param $date
 * @return le mois suivant
 */
function getMoisSuivant($date) {
    $month=substr($date, -2); //récupère les deux derniers caractères (mois)
    $year=substr($date, 0, 4); //récupère les quatres premiers caractères (année)
    
    $dateDepart= strtotime("01-$month-$year");
    $dateFin=date("Ym", strtotime("+1 month", $dateDepart));
    
    return $dateFin;
}

?>